/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb;

import java.util.List;
import javax.ejb.Stateless;
import java.util.Date;
import java.util.Iterator;
import javax.ejb.EJB;

/**
 *
 * @author alexcarpentieri
 */
@Stateless
public class GestoreCampagnaRaccoltaPunti implements GestoreCampagnaRaccoltaPuntiLocal {

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
   @EJB
   public CampagnaRaccoltaPuntiFacadeLocal campagnaFacade;
   @EJB
   public EsercizioCommercialeFacadeLocal esercizioFacade;
    @Override
    public CampagnaRaccoltaPunti creaCampagnaRaccoltaPunti(Date dataInizio, Date dataFine, EsercizioCommerciale esercizioCommerciale, List<Premio> listaPremi) {
        CampagnaRaccoltaPunti campagna=new CampagnaRaccoltaPunti();
        campagna.setDataInizio(dataInizio);
        campagna.setDataFine(dataFine);
        campagna.setEsercizioCommerciale(esercizioCommerciale);
        campagna.setListaPremi(listaPremi);
        campagna.setRaccoltaPuntiDelClienteList(null);
        campagnaFacade.create(campagna);
        esercizioFacade.edit(esercizioCommerciale);
        return campagna;
    }
    @Override
    public CampagnaRaccoltaPunti aggiornaCampagnaRaccoltaPunti(CampagnaRaccoltaPunti campagna){
        campagnaFacade.edit(campagna);
        return campagna;
    }
    
    //questo metodo può essere static, forse è meglio metterlo in una classe a parte
    @Override
    public CampagnaRaccoltaPunti mostRecent(List<CampagnaRaccoltaPunti> list){
        CampagnaRaccoltaPunti mostRecent=null;
        for(CampagnaRaccoltaPunti e:list){
            if(mostRecent==null || mostRecent.getDataInizio().before(e.getDataInizio()))
                mostRecent=e;
        }
        return mostRecent;
    }

    @Override
    public Premio cercaProssimoPremio(RaccoltaPuntiDelCliente raccoltaPuntiDelCliente) {
        Long punteggio=raccoltaPuntiDelCliente.getPunteggio();
        CampagnaRaccoltaPunti campagnaRaccoltaPunti = raccoltaPuntiDelCliente.getCampagnaRaccoltaPunti();
        List<Premio> listaPremi = raccoltaPuntiDelCliente.getCampagnaRaccoltaPunti().getListaPremi();
        Iterator<Premio> iterator = listaPremi.iterator();
        Premio premioMinore=null;
        if(iterator.hasNext())
            premioMinore=iterator.next();
        while(iterator.hasNext()){
            Premio next = iterator.next();
            if(next.getNumeroDiPuntiNecessari()>punteggio && next.getNumeroDiPuntiNecessari()<premioMinore.getNumeroDiPuntiNecessari()){
                premioMinore=next;
            }
        }
        return premioMinore;
    }
    
    
    
}
